import MapLoader from '@/utils/AMap'

// 地图获取定位（type：获取定位类型，1高德、2GPS,type为2时需要打包成app，在安卓手机环境下运行才能生效）
export function getPosition(type) {
    debugger
    let resultPosition
    if (type === 1) {
        MapLoader().then(
            (AMap) => {
                AMap.plugin('AMap.Geolocation', function () {
                    var geolocation = new AMap.Geolocation({
                        // 是否使用高精度定位，默认：true
                        enableHighAccuracy: true,
                        // 设置定位超时时间，默认：无穷大
                        timeout: 10000,
                        // 定位按钮的停靠位置的偏移量，默认：Pixel(10, 20)
                        buttonOffset: new AMap.Pixel(10, 20),
                        //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见，默认：false
                        zoomToAccuracy: true,
                        //  定位按钮的排放位置,  RB表示右下
                        buttonPosition: 'RB'
                    })
                    geolocation.getCurrentPosition()
                    AMap.event.addListener(geolocation, 'complete', onComplete)
                    AMap.event.addListener(geolocation, 'error', onError)
                    function onComplete(data) {
                        resultPosition = {
                            longitude: data.position.lng + '',
                            latitude: data.position.lat + '',
                            address: data.formattedAddress
                        }
                    }
                    function onError(data) {
                        // 定位出错
                        console.log(data);
                    }
                })
            },
            (e) => {
                console.log('地图加载失败', e)
            }
        )
    }

    if (type === 2) {
        let geocoder
        function geocoderGetAddress(longitude, latitude) {
            geocoder.getAddress([longitude, latitude], function (status, result) {
                if (status === 'complete' && result.info === 'OK') {
                    resultPosition = {
                        longitude: longitude,
                        latitude: latitude,
                        address: result.regeocode.formattedAddress
                    }

                }
            })
        }

        function transformPosition(gps) {
            MapLoader().then(
                (AMap) => {
                    AMap.convertFrom(gps, 'gps', function (status, result) {
                        if (result.info === 'ok') {
                            let lnglatsObj = result.locations[0] // Array.<LngLat>
                            AMap.plugin('AMap.Geocoder', function () {
                                geocoder = new AMap.Geocoder({
                                    city: '中国'
                                })
                            })
                            // 高德地图根据坐标获取地址
                            geocoderGetAddress(
                                lnglatsObj.lng,
                                lnglatsObj.lat
                            )
                        }
                    })
                })

        }

        function getPositionByPhone() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(
                    function (position) {
                        var gps = [position.coords.longitude, position.coords.latitude]
                        // 将gps坐标转换为高德坐标
                        transformPosition(gps)
                    },
                    function (err) {
                        console.log(err.code);
                        // code：返回获取位置的状态
                        // 0  :  不包括其他错误编号中的错误
                        // 1  :  用户拒绝浏览器获取位置信息
                        // 2  :  尝试获取用户信息，但失败了
                        // 3  :  设置了timeout值，获取位置超时了
                    },
                    {
                        enableHighAcuracy: false, //位置是否精确获取
                        timeout: 5000, //获取位置允许的最长时间
                        maximumAge: 1000 //多久更新获取一次位置
                    }
                )
            } else {
                plus.nativeUI.toast('不支持地理定位。', {
                    duration: 'short'
                })
            }
        }

        if (window.plus) {
            getPositionByPhone()
        } else {
            document.addEventListener('plusready', getPositionByPhone, false)
        }
    }

    return resultPosition
}
